/*****************************************************************************
*
*  PROJECT:     Lua Interpreter
*  LICENSE:     See LICENSE in the top level directory
*  FILE:        glDriver/gl_context.h
*  PURPOSE:     OpenGL driver internal/private header file
*  DEVELOPERS:  Martin Turski <quiret@gmx.de>
*
*  Multi Theft Auto is available from http://www.multitheftauto.com/
*
*****************************************************************************/

#ifndef _OPENGL_CONTEXT_DESCRIPTOR_
#define _OPENGL_CONTEXT_DESCRIPTOR_

struct glContextDescriptor
{
    // OpenGL 1.3 prototypes
    glActiveTexture_t               glActiveTexture;
    glClientActiveTexture_t         glClientActiveTexture;
    glMultiTexCoord1d_t             glMultiTexCoord1d;
    glMultiTexCoord1dv_t            glMultiTexCoord1dv;
    glMultiTexCoord1f_t             glMultiTexCoord1f;
    glMultiTexCoord1fv_t            glMultiTexCoord1fv;
    glMultiTexCoord1i_t             glMultiTexCoord1i;
    glMultiTexCoord1iv_t            glMultiTexCoord1iv;
    glMultiTexCoord1s_t             glMultiTexCoord1s;
    glMultiTexCoord1sv_t            glMultiTexCoord1sv;
    glMultiTexCoord2d_t             glMultiTexCoord2d;
    glMultiTexCoord2dv_t            glMultiTexCoord2dv;
    glMultiTexCoord2f_t             glMultiTexCoord2f;
    glMultiTexCoord2fv_t            glMultiTexCoord2fv;
    glMultiTexCoord2i_t             glMultiTexCoord2i;
    glMultiTexCoord2iv_t            glMultiTexCoord2iv;
    glMultiTexCoord2s_t             glMultiTexCoord2s;
    glMultiTexCoord2sv_t            glMultiTexCoord2sv;
    glMultiTexCoord3d_t             glMultiTexCoord3d;
    glMultiTexCoord3dv_t            glMultiTexCoord3dv;
    glMultiTexCoord3f_t             glMultiTexCoord3f;
    glMultiTexCoord3fv_t            glMultiTexCoord3fv;
    glMultiTexCoord3i_t             glMultiTexCoord3i;
    glMultiTexCoord3iv_t            glMultiTexCoord3iv;
    glMultiTexCoord3s_t             glMultiTexCoord3s;
    glMultiTexCoord3sv_t            glMultiTexCoord3sv;
    glMultiTexCoord4d_t             glMultiTexCoord4d;
    glMultiTexCoord4dv_t            glMultiTexCoord4dv;
    glMultiTexCoord4f_t             glMultiTexCoord4f;
    glMultiTexCoord4fv_t            glMultiTexCoord4fv;
    glMultiTexCoord4i_t             glMultiTexCoord4i;
    glMultiTexCoord4iv_t            glMultiTexCoord4iv;
    glMultiTexCoord4s_t             glMultiTexCoord4s;
    glMultiTexCoord4sv_t            glMultiTexCoord4sv;
    glLoadTransposeMatrixf_t        glLoadTransposeMatrixf;
    glLoadTransposeMatrixd_t        glLoadTransposeMatrixd;
    glMultTransposeMatrixf_t        glMultTransposeMatrixf;
    glMultTransposeMatrixd_t        glMultTransposeMatrixd;
    glSampleCoverage_t              glSampleCoverage;
    glCompressedTexImage3D_t        glCompressedTexImage3D;
    glCompressedTexImage2D_t        glCompressedTexImage2D;
    glCompressedTexImage1D_t        glCompressedTexImage1D;
    glCompressedTexSubImage3D_t     glCompressedTexSubImage3D;
    glCompressedTexSubImage2D_t     glCompressedTexSubImage2D;
    glCompressedTexSubImage1D_t     glCompressedTexSubImage1D;
    glGetCompressedTexImage_t       glGetCompressedTexImage;

    // OpenGL EXT render buffer prototypes
    glIsRenderbufferEXT_t                           glIsRenderbufferEXT;
    glBindRenderbufferEXT_t                         glBindRenderbufferEXT;
    glDeleteRenderbuffersEXT_t                      glDeleteRenderbuffersEXT;
    glGenRenderbuffersEXT_t                         glGenRenderbuffersEXT;
    glRenderbufferStorageEXT_t                      glRenderbufferStorageEXT;
    glGetRenderbufferParameterivEXT_t               glGetRenderbufferParameterivEXT;
    glIsFramebufferEXT_t                            glIsFramebufferEXT;
    glBindFramebufferEXT_t                          glBindFramebufferEXT;
    glDeleteFramebuffersEXT_t                       glDeleteFramebuffersEXT;
    glGenFramebuffersEXT_t                          glGenFramebuffersEXT;
    glCheckFramebufferStatusEXT_t                   glCheckFramebufferStatusEXT;
    glFramebufferTexture1DEXT_t                     glFramebufferTexture1DEXT;
    glFramebufferTexture2DEXT_t                     glFramebufferTexture2DEXT;
    glFramebufferTexture3DEXT_t                     glFramebufferTexture3DEXT;
    glFramebufferRenderbufferEXT_t                  glFramebufferRenderbufferEXT;
    glGetFramebufferAttachmentParameterivEXT_t      glGetFramebufferAttachmentParameterivEXT;
    glGenerateMipmapEXT_t                           glGenerateMipmapEXT;

    // OpenGL ARB shader objects prototypes
    glDeleteObjectARB_t             glDeleteObjectARB;
    glGetHandleARB_t                glGetHandleARB;
    glDetachObjectARB_t             glDetachObjectARB;
    glCreateShaderObjectARB_t       glCreateShaderObjectARB;
    glShaderSourceARB_t             glShaderSourceARB;
    glCompileShaderARB_t            glCompileShaderARB;
    glCreateProgramObjectARB_t      glCreateProgramObjectARB;
    glAttachObjectARB_t             glAttachObjectARB;
    glLinkProgramARB_t              glLinkProgramARB;
    glUseProgramObjectARB_t         glUseProgramObjectARB;
    glValidateProgramARB_t          glValidateProgramARB;
    glUniform1fARB_t                glUniform1fARB;
    glUniform2fARB_t                glUniform2fARB;
    glUniform3fARB_t                glUniform3fARB;
    glUniform4fARB_t                glUniform4fARB;
    glUniform1iARB_t                glUniform1iARB;
    glUniform2iARB_t                glUniform2iARB;
    glUniform3iARB_t                glUniform3iARB;
    glUniform4iARB_t                glUniform4iARB;
    glUniform1fvARB_t               glUniform1fvARB;
    glUniform2fvARB_t               glUniform2fvARB;
    glUniform3fvARB_t               glUniform3fvARB;
    glUniform4fvARB_t               glUniform4fvARB;
    glUniform1ivARB_t               glUniform1ivARB;
    glUniform2ivARB_t               glUniform2ivARB;
    glUniform3ivARB_t               glUniform3ivARB;
    glUniform4ivARB_t               glUniform4ivARB;
    glUniformMatrix2fvARB_t         glUniformMatrix2fvARB;
    glUniformMatrix3fvARB_t         glUniformMatrix3fvARB;
    glUniformMatrix4fvARB_t         glUniformMatrix4fvARB;
    glGetObjectParameterfvARB_t     glGetObjectParameterfvARB;
    glGetObjectParameterivARB_t     glGetObjectParameterivARB;
    glGetInfoLogARB_t               glGetInfoLogARB;
    glGetAttachedObjectsARB_t       glGetAttachedObjectsARB;
    glGetUniformLocationARB_t       glGetUniformLocationARB;
    glGetActiveUniformARB_t         glGetActiveUniformARB;
    glGetUniformfvARB_t             glGetUniformfvARB;
    glGetUniformivARB_t             glGetUniformivARB;
    glGetShaderSourceARB_t          glGetShaderSourceARB;

    // OpenGL ARB_vertex_program prototypes
    glVertexAttrib1dARB_t               glVertexAttrib1dARB;
    glVertexAttrib1dvARB_t              glVertexAttrib1dvARB;
    glVertexAttrib1fARB_t               glVertexAttrib1fARB;
    glVertexAttrib1fvARB_t              glVertexAttrib1fvARB;
    glVertexAttrib1sARB_t               glVertexAttrib1sARB;
    glVertexAttrib1svARB_t              glVertexAttrib1svARB;
    glVertexAttrib2dARB_t               glVertexAttrib2dARB;
    glVertexAttrib2dvARB_t              glVertexAttrib2dvARB;
    glVertexAttrib2fARB_t               glVertexAttrib2fARB;
    glVertexAttrib2fvARB_t              glVertexAttrib2fvARB;
    glVertexAttrib2sARB_t               glVertexAttrib2sARB;
    glVertexAttrib2svARB_t              glVertexAttrib2svARB;
    glVertexAttrib3dARB_t               glVertexAttrib3dARB;
    glVertexAttrib3dvARB_t              glVertexAttrib3dvARB;
    glVertexAttrib3fARB_t               glVertexAttrib3fARB;
    glVertexAttrib3fvARB_t              glVertexAttrib3fvARB;
    glVertexAttrib3sARB_t               glVertexAttrib3sARB;
    glVertexAttrib3svARB_t              glVertexAttrib3svARB;
    glVertexAttrib4NbvARB_t             glVertexAttrib4NbvARB;
    glVertexAttrib4NivARB_t             glVertexAttrib4NivARB;
    glVertexAttrib4NsvARB_t             glVertexAttrib4NsvARB;
    glVertexAttrib4NubARB_t             glVertexAttrib4NubARB;
    glVertexAttrib4NubvARB_t            glVertexAttrib4NubvARB;
    glVertexAttrib4NuivARB_t            glVertexAttrib4NuivARB;
    glVertexAttrib4NusvARB_t            glVertexAttrib4NusvARB;
    glVertexAttrib4bvARB_t              glVertexAttrib4bvARB;
    glVertexAttrib4dARB_t               glVertexAttrib4dARB;
    glVertexAttrib4dvARB_t              glVertexAttrib4dvARB;
    glVertexAttrib4fARB_t               glVertexAttrib4fARB;
    glVertexAttrib4fvARB_t              glVertexAttrib4fvARB;
    glVertexAttrib4ivARB_t              glVertexAttrib4ivARB;
    glVertexAttrib4sARB_t               glVertexAttrib4sARB;
    glVertexAttrib4svARB_t              glVertexAttrib4svARB;
    glVertexAttrib4ubvARB_t             glVertexAttrib4ubvARB;
    glVertexAttrib4uivARB_t             glVertexAttrib4uivARB;
    glVertexAttrib4usvARB_t             glVertexAttrib4usvARB;
    glVertexAttribPointerARB_t          glVertexAttribPointerARB;
    glEnableVertexAttribArrayARB_t      glEnableVertexAttribArrayARB;
    glDisableVertexAttribArrayARB_t     glDisableVertexAttribArrayARB;
    glGetVertexAttribdvARB_t            glGetVertexAttribdvARB;
    glGetVertexAttribfvARB_t            glGetVertexAttribfvARB;
    glGetVertexAttribivARB_t            glGetVertexAttribivARB;
    glGetVertexAttribPointervARB_t      glGetVertexAttribPointervARB;

    // OpenGL ARB_vertex_shader prototypes
    glBindAttribLocationARB_t       glBindAttribLocationARB;
    glGetActiveAttribARB_t          glGetActiveAttribARB;
    glGetAttribLocationARB_t        glGetAttribLocationARB;

    // OpenGL 2.0 prototypes
    glBlendEquationSeparate_t       glBlendEquationSeparate;
    glDrawBuffers_t                 glDrawBuffers;
    glStencilOpSeparate_t           glStencilOpSeparate;
    glStencilFuncSeparate_t         glStencilFuncSeparate;
    glStencilMaskSeparate_t         glStencilMaskSeparate;
    glAttachShader_t                glAttachShader;
    glBindAttribLocation_t          glBindAttribLocation;
    glCompileShader_t               glCompileShader;
    glCreateProgram_t               glCreateProgram;
    glCreateShader_t                glCreateShader;
    glDeleteProgram_t               glDeleteProgram;
    glDeleteShader_t                glDeleteShader;
    glDetachShader_t                glDetachShader;
    glDisableVertexAttribArray_t    glDisableVertexAttribArray;
    glEnableVertexAttribArray_t     glEnableVertexAttribArray;
    glGetActiveAttrib_t             glGetActiveAttrib;
    glGetActiveUniform_t            glGetActiveUniform;
    glGetAttachedShaders_t          glGetAttachedShaders;
    glGetAttribLocation_t           glGetAttribLocation;
    glGetProgramiv_t                glGetProgramiv;
    glGetProgramInfoLog_t           glGetProgramInfoLog;
    glGetShaderiv_t                 glGetShaderiv;
    glGetShaderInfoLog_t            glGetShaderInfoLog;
    glGetShaderSource_t             glGetShaderSource;
    glGetUniformLocation_t          glGetUniformLocation;
    glGetUniformfv_t                glGetUniformfv;
    glGetUniformiv_t                glGetUniformiv;
    glGetVertexAttribdv_t           glGetVertexAttribdv;
    glGetVertexAttribfv_t           glGetVertexAttribfv;
    glGetVertexAttribiv_t           glGetVertexAttribiv;
    glGetVertexAttribPointerv_t     glGetVertexAttribPointerv;
    glIsProgram_t                   glIsProgram;
    glIsShader_t                    glIsShader;
    glLinkProgram_t                 glLinkProgram;
    glShaderSource_t                glShaderSource;
    glUseProgram_t                  glUseProgram;
    glUniform1f_t                   glUniform1f;
    glUniform2f_t                   glUniform2f;
    glUniform3f_t                   glUniform3f;
    glUniform4f_t                   glUniform4f;
    glUniform1i_t                   glUniform1i;
    glUniform2i_t                   glUniform2i;
    glUniform3i_t                   glUniform3i;
    glUniform4i_t                   glUniform4i;
    glUniform1fv_t                  glUniform1fv;
    glUniform2fv_t                  glUniform2fv;
    glUniform3fv_t                  glUniform3fv;
    glUniform4fv_t                  glUniform4fv;
    glUniform1iv_t                  glUniform1iv;
    glUniform2iv_t                  glUniform2iv;
    glUniform3iv_t                  glUniform3iv;
    glUniform4iv_t                  glUniform4iv;
    glUniformMatrix2fv_t            glUniformMatrix2fv;
    glUniformMatrix3fv_t            glUniformMatrix3fv;
    glUniformMatrix4fv_t            glUniformMatrix4fv;
    glValidateProgram_t             glValidateProgram;
    glVertexAttrib1d_t              glVertexAttrib1d;
    glVertexAttrib1dv_t             glVertexAttrib1dv;
    glVertexAttrib1f_t              glVertexAttrib1f;
    glVertexAttrib1fv_t             glVertexAttrib1fv;
    glVertexAttrib1s_t              glVertexAttrib1s;
    glVertexAttrib1sv_t             glVertexAttrib1sv;
    glVertexAttrib2d_t              glVertexAttrib2d;
    glVertexAttrib2dv_t             glVertexAttrib2dv;
    glVertexAttrib2f_t              glVertexAttrib2f;
    glVertexAttrib2fv_t             glVertexAttrib2fv;
    glVertexAttrib2s_t              glVertexAttrib2s;
    glVertexAttrib2sv_t             glVertexAttrib2sv;
    glVertexAttrib3d_t              glVertexAttrib3d;
    glVertexAttrib3dv_t             glVertexAttrib3dv;
    glVertexAttrib3f_t              glVertexAttrib3f;
    glVertexAttrib3fv_t             glVertexAttrib3fv;
    glVertexAttrib3s_t              glVertexAttrib3s;
    glVertexAttrib3sv_t             glVertexAttrib3sv;
    glVertexAttrib4Nbv_t            glVertexAttrib4Nbv;
    glVertexAttrib4Niv_t            glVertexAttrib4Niv;
    glVertexAttrib4Nsv_t            glVertexAttrib4Nsv;
    glVertexAttrib4Nub_t            glVertexAttrib4Nub;
    glVertexAttrib4Nubv_t           glVertexAttrib4Nubv;
    glVertexAttrib4Nuiv_t           glVertexAttrib4Nuiv;
    glVertexAttrib4Nusv_t           glVertexAttrib4Nusv;
    glVertexAttrib4bv_t             glVertexAttrib4bv;
    glVertexAttrib4d_t              glVertexAttrib4d;
    glVertexAttrib4dv_t             glVertexAttrib4dv;
    glVertexAttrib4f_t              glVertexAttrib4f;
    glVertexAttrib4fv_t             glVertexAttrib4fv;
    glVertexAttrib4iv_t             glVertexAttrib4iv;
    glVertexAttrib4s_t              glVertexAttrib4s;
    glVertexAttrib4sv_t             glVertexAttrib4sv;
    glVertexAttrib4ubv_t            glVertexAttrib4ubv;
    glVertexAttrib4uiv_t            glVertexAttrib4uiv;
    glVertexAttrib4usv_t            glVertexAttrib4usv;
    glVertexAttribPointer_t         glVertexAttribPointer;

    // OpenGL 3.0 prototypes
    glColorMaski_t                              glColorMaski;
    glGetBooleani_v_t                           glGetBooleani_v;
    glGetIntegeri_v_t                           glGetIntegeri_v;
    glEnablei_t                                 glEnablei;
    glDisablei_t                                glDisablei;
    glIsEnabledi_t                              glIsEnabledi;
    glBeginTransformFeedback_t                  glBeginTransformFeedback;
    glEndTransformFeedback_t                    glEndTransformFeedback;
    glBindBufferRange_t                         glBindBufferRange;
    glBindBufferBase_t                          glBindBufferBase;
    glTransformFeedbackVaryings_t               glTransformFeedbackVaryings;
    glGetTransformFeedbackVarying_t             glGetTransformFeedbackVarying;
    glClampColor_t                              glClampColor;
    glBeginConditionalRender_t                  glBeginConditionalRender;
    glEndConditionalRender_t                    glEndConditionalRender;
    glVertexAttribIPointer_t                    glVertexAttribIPointer;
    glGetVertexAttribIiv_t                      glGetVertexAttribIiv;
    glGetVertexAttribIuiv_t                     glGetVertexAttribIuiv;
    glVertexAttribI1i_t                         glVertexAttribI1i;
    glVertexAttribI2i_t                         glVertexAttribI2i;
    glVertexAttribI3i_t                         glVertexAttribI3i;
    glVertexAttribI4i_t                         glVertexAttribI4i;
    glVertexAttribI1ui_t                        glVertexAttribI1ui;
    glVertexAttribI2ui_t                        glVertexAttribI2ui;
    glVertexAttribI3ui_t                        glVertexAttribI3ui;
    glVertexAttribI4ui_t                        glVertexAttribI4ui;
    glVertexAttribI1iv_t                        glVertexAttribI1iv;
    glVertexAttribI2iv_t                        glVertexAttribI2iv;
    glVertexAttribI3iv_t                        glVertexAttribI3iv;
    glVertexAttribI4iv_t                        glVertexAttribI4iv;
    glVertexAttribI1uiv_t                       glVertexAttribI1uiv;
    glVertexAttribI2uiv_t                       glVertexAttribI2uiv;
    glVertexAttribI3uiv_t                       glVertexAttribI3uiv;
    glVertexAttribI4uiv_t                       glVertexAttribI4uiv;
    glVertexAttribI4bv_t                        glVertexAttribI4bv;
    glVertexAttribI4sv_t                        glVertexAttribI4sv;
    glVertexAttribI4ubv_t                       glVertexAttribI4ubv;
    glVertexAttribI4usv_t                       glVertexAttribI4usv;
    glGetUniformuiv_t                           glGetUniformuiv;
    glBindFragDataLocation_t                    glBindFragDataLocation;
    glGetFragDataLocation_t                     glGetFragDataLocation;
    glUniform1ui_t                              glUniform1ui;
    glUniform2ui_t                              glUniform2ui;
    glUniform3ui_t                              glUniform3ui;
    glUniform4ui_t                              glUniform4ui;
    glUniform1uiv_t                             glUniform1uiv;
    glUniform2uiv_t                             glUniform2uiv;
    glUniform3uiv_t                             glUniform3uiv;
    glUniform4uiv_t                             glUniform4uiv;
    glTexParameterIiv_t                         glTexParameterIiv;
    glTexParameterIuiv_t                        glTexParameterIuiv;
    glGetTexParameterIiv_t                      glGetTexParameterIiv;
    glGetTexParameterIuiv_t                     glGetTexParameterIuiv;
    glClearBufferiv_t                           glClearBufferiv;
    glClearBufferuiv_t                          glClearBufferuiv;
    glClearBufferfv_t                           glClearBufferfv;
    glClearBufferfi_t                           glClearBufferfi;
    glGetStringi_t                              glGetStringi;
    glIsRenderbuffer_t                          glIsRenderbuffer;
    glBindRenderbuffer_t                        glBindRenderbuffer;
    glDeleteRenderbuffers_t                     glDeleteRenderbuffers;
    glGenRenderbuffers_t                        glGenRenderbuffers;
    glRenderbufferStorage_t                     glRenderbufferStorage;
    glGetRenderbufferParameteriv_t              glGetRenderbufferParameteriv;
    glIsFramebuffer_t                           glIsFramebuffer;
    glBindFramebuffer_t                         glBindFramebuffer;
    glDeleteFramebuffers_t                      glDeleteFramebuffers;
    glGenFramebuffers_t                         glGenFramebuffers;
    glCheckFramebufferStatus_t                  glCheckFramebufferStatus;
    glFramebufferTexture1D_t                    glFramebufferTexture1D;
    glFramebufferTexture2D_t                    glFramebufferTexture2D;
    glFramebufferTexture3D_t                    glFramebufferTexture3D;
    glFramebufferRenderbuffer_t                 glFramebufferRenderbuffer;
    glGetFramebufferAttachmentParameteriv_t     glGetFramebufferAttachmentParameteriv;
    glGenerateMipmap_t                          glGenerateMipmap;
    glBlitFramebuffer_t                         glBlitFramebuffer;
    glRenderbufferStorageMultisample_t          glRenderbufferStorageMultisample;
    glFramebufferTextureLayer_t                 glFramebufferTextureLayer;
    glMapBufferRange_t                          glMapBufferRange;
    glFlushMappedBufferRange_t                  glFlushMappedBufferRange;
    glBindVertexArray_t                         glBindVertexArray;
    glDeleteVertexArrays_t                      glDeleteVertexArrays;
    glGenVertexArrays_t                         glGenVertexArrays;
    glIsVertexArray_t                           glIsVertexArray;
};

#endif //_OPENGL_CONTEXT_DESCRIPTOR_